/**
  ******************************************************************************
  * @file    system_PT32X005.c
  * @author  应用开发团队
  * @version V1.1.0
  * @date    2022/2/10
  * @brief
  ******************************************************************************
  * @attention
  *
  * 当前的固件仅供指导, 目的是向客户提供有关其产品的编码信息,以节省他们的时间。
  * 对于因此类固件的内容/或客户使用其中包含的编码信息而引起的任何索赔,
  * Pai-IC不对任何直接， 间接或继发的损害负责。
  *
  * (C) 版权所有Pai-IC Microelectronics
  ******************************************************************************
  */



#include "PT32X005.h"

void Wait_ClockReady(void)
{//not modify the delay param...
	volatile int delay;
	for (delay = 0; delay < 10000; delay++);
}

//<<< Use Configuration Wizard in Context Menu >>>

/*--------------------- 时钟配置 ----------------------------------
//
//    <h> 内部高速RC振荡器HSI（24M）
//      <q0>    使能
//                <i> 默认值：使能
//    </h>
//    <h> PLL时钟
//      <e2>    使能
//                <i> 默认值：不使能
//        <o3>  PLL时钟源
//                <0=> HSI
//                <1=> LSI
//                <i> 默认倍频时钟源：HSI
//      </e>
//    </h>
//    <h> 系统时钟配置 (SYS_CLK)
//      <o4>    系统时钟源
//                <0=> HSI
//                <2=> PLL时钟
//                <3=> LSI
//                <i> 默认系统时钟源：HSI
//      <o5>    HCLK分频器
//                <0=> 0
//                <1=> 1
//                <2=> 2
//                <3=> 3
//                <4=> 4
//                <5=> 5
//                <6=> 6
//                <7=> 7
//                <8=> 8
//                <9=> 9
//                <10=> 10
//                <11=> 11
//                <12=> 12
//                <13=> 13
//                <14=> 14
//                <15=> 15
//                <16=> 16
//                <17=> 17
//                <18=> 18
//                <19=> 19
//                <20=> 20
//                <21=> 21
//                <22=> 22
//                <23=> 23
//                <24=> 24
//                <25=> 25
//                <26=> 26
//                <27=> 27
//                <28=> 28
//                <29=> 29
//                <30=> 30
//                <31=> 31
//                <i> 默认系统时钟源分频：0
//      <o6>    PCLK 分频器
//                <0=> 0
//                <1=> 1
//                <2=> 2
//                <3=> 3
//                <4=> 4
//                <5=> 5
//                <6=> 6
//                <7=> 7
//                <8=> 8
//                <9=> 9
//                <10=> 10
//                <11=> 11
//                <12=> 12
//                <13=> 13
//                <14=> 14
//                <15=> 15
//                <16=> 16
//                <17=> 17
//                <18=> 18
//                <19=> 19
//                <20=> 20
//                <21=> 21
//                <22=> 22
//                <23=> 23
//                <24=> 24
//                <25=> 25
//                <26=> 26
//                <27=> 27
//                <28=> 28
//                <29=> 29
//                <30=> 30
//                <31=> 31
//                <i> 默认PCLK分频：0
//    </h>
//
//    <h> FLASH 配置
//      <o7>   Flash 取指令等待周期
//                <0=> 0 WS
//                <1=> 1 WS
//                <i>  0 WS:  1 KHz <= HCLK <= 24 MHz
//                <i>  1 WS: 24 MHz <  HCLK <= 48 MHz
//    </h>
//
//    <h> MCO输出配置
//      <e8>    MCO输出使能
//                <i> 默认：不使能，PC4输出系统时钟
//        <o9>    MCO时钟源选择
//                <0=> HSI
//                <1=> PLL时钟
//                <2=> LSI
//                <3=> SYS_CLK
//                <i> 默认系统时钟源：内部HSI
//        <o10>   MCO分频
//                <0=> 1
//                <1=> 2
//                <2=> 4
//                <3=> 8
//                <4=> 16
*/

#define IOSC_24M_ENABLE               (1)     /*!< 0: DISABLE,  1: ENABLE                                               */
#define EOSC_CLK_ENABLE               (0)     /*!< 0: DISABLE,  1: ENABLE                                               */
#define FD_CLK_ENABLE                 (0)     /*!< 0: DISABLE,  1: ENABLE                                               */
#define FD_CLK_SRC                    (0)     /*!< 0: IOCS_24M, 1: EOSC_CLK    2:IOSC_32K                               */
#define HCLK_SRC                      (0)     /*!< 0: IOCS_24M, 1: FD_CLK      2:IOSC_32K                  */
#define HCLK_DIV                      (0)     /*!< 0: DIV1,     1: DIV2,   2: DIV4,   3: DIV8,   4: DIV16,  5: DIV32    */
#define PCLK_DIV                      (0)     /*!< 0: DIV1,     1: DIV2,   2: DIV4,   3: DIV8,   4: DIV16,  5: DIV32    */
#define WAIT_STATE                    (1)     /*!< 0: 0 WS,     1: 1 WS                                   */
#define MCO_ENABLE                    (0)     /*!< 0: DISABLE,  1: ENABLE                                               */
#define MCO_SRCSEL                    (3)
#define MCO_DIV                       (4)     /*!< 0: DIV1,     1: DIV2,   2: DIV4,   3: DIV8,   4: DIV16,  5: DIV32    */

/**
 * Initialize the system
 *
 * @param  none
 * @return none
 *
 * @brief  Setup the microcontroller system.
 *         Initialize the System.
 */
extern void Software_Delay(u32 timeBase10ms);
void SystemInit (void)
{
	RCC->MCOR = 3;

#if  ((HCLK_SRC == 0)||(HCLK_SRC == 1))
	RCC->CFGR = 0;
	RCC->PCR &= 0xFFFFFFFE;			//FD enable
	#if (IOSC_24M_ENABLE == 0)
		#error "System clock source issue,Inter 24M RC has not been enabled(已经选择了内部24兆RC时钟为系统时钟源，但是内部24兆RC时钟未开启)"
	#else
	RCC->HCR |= 0x01;			//inter 24mHZ enable
	#endif
	#if (FD_CLK_ENABLE == 1)
		# warning "Double Frequency is Enable,will Increase Power(启用了倍频模块，但是未使用将增加IC耗电)"
		RCC->PCR |= 0x01;
	#endif
#elif  (HCLK_SRC == 2)
	#if (FD_CLK_ENABLE == 0)
		#error "System clock source issue,Inter RC32K has not been enabled(已经选择了倍频时钟为系统时钟源，但是倍频模块未开启)"
	#else
		#if (FD_CLK_SRC == 0)
			#if (IOSC_24M_ENABLE == 0)
				#error "System clock source issue,Inter 24M RC has not been enabled(已经选择了内部24兆RC时钟为系统时钟源，但是内部24兆RC时钟未开启)"
			#else
				RCC->HCR |= 0x01;		//inter 24mHZ enable
				RCC->CFGR = 0;			//FD clocl source == 24mhz
				RCC->PCR = 0x01;			//FD enable  --
				RCC->CFGR |= 0x02;
			#endif
		#elif (FD_CLK_SRC == 1)
			RCC->CFGR |= 0x04;
			RCC->LCR |= 0x01;		//inter 24mHZ enable
			RCC->PCR = 0x01;			//FD enable  --
			RCC->CFGR |= 0x02;
			#if (IOSC_24M_ENABLE == 1)
				# warning "Internal 24M RC clock is Enable,will Increase Power(内部24兆时钟，如果未使用将增加IC耗电)"
				RCC->HCR |= 0x01;
			#else
				RCC->HCR = 0;		//inter 24mHZ disable
			#endif
		#endif
	#endif
#elif  (HCLK_SRC == 3)
	#if (FD_CLK_ENABLE == 1)
		# warning "Double Frequency is Enable,will Increase Power(启用了倍频模块，但是未使用将增加IC耗电)"
		RCC->PCR |= 0x01;
	#else
		RCC->PCR = 0x00;
	#endif
	#if (IOSC_24M_ENABLE == 1)
		# warning "Internal 24M clock is Enable,will Increase Power(内部24M，将增加IC耗电)"
		RCC->HCR |= 0x01;
	#else
		RCC->HCR = 0;		//inter 24mHZ disable
	#endif
	RCC->CFGR |= 0x03;
#else
	#error "System clock source issue: System clock has not been enabled"
#endif

	IFMC ->CR= ((IFMC_CR_KEY_MAIN) | (WAIT_STATE << 5)) ; //wait state

	RCC->CFGR |= (HCLK_DIV << 4);
	RCC->CFGR |= (PCLK_DIV << 24);
  RCC->CFGR |= RCC_CFGR_WKSK;

#if (MCO_ENABLE == 1)
	AFIOC->AFS0 |= (1 << 16); //PC4
	RCC->MCOR = (MCO_DIV | (MCO_SRCSEL << 4) );

	#if (MCO_SRCSEL == 0) & (IOSC_24M_ENABLE == 0)
		# warning "MCO has no Clock Output(IOSC_24M is Not Enable)(内部RC24兆时钟未开启，MCO无波形输出)"
	#elif (MCO_SRCSEL == 1) & (FD_CLK_ENABLE == 0)
		# warning "MCO has no Clock Output(Double Frequency is Not Enable)(倍频器未开启，MCO无波形输出)"
	#endif
#endif

}

/**
  * @}
  */
